package com.zzy.mccjt.retelimiter;

import com.zzy.mccjt.retelimiter.method.LimiterConstants;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @program: mccjt-cloud
 * @description: 限流
 * @author: zhouyang.zheng
 * @create: 2022-08-01 15:49
 **/
@Inherited
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimiter {

    /**
     * 限流类型
     * @return
     */
    LimiterType type() default LimiterType.KEY;

    /**
     * 自定义限流Key，如果未设置会取目标方法所有参数值，转json计算sha1做为key
     */
    String key() default LimiterConstants.UNDEFINED_STRING;

    /**
     * 每秒生产令牌数量
     */
    float replenishRate() default 1.0F;

    /**
     * 桶容量（并发数量）
     */
    int burstCapacity() default 10;

    /**
     * 每次请求消耗令牌数量
     */
    int requestedTokens() default 1;
}
